<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 一种"更安全"的做法是传入一个特殊的对象 把this绑定到这个对象不会对你的程序产生任何副作用
        // 我们可以创建一个'DMZ'对象 --- 它就是一个空的非委托对象
        // 如果我们在忽略this绑定时总传入一个DMZ对象 就什么都不需要担心了
        // 因为任何对于this的使用都会被限制在这个空对象中 
        // 不会对全局对象产生什么影响
        function foo(a,b){
            console.log("a:" + a + ", b:" + b);
        }
        // 我们的DMZ对象
        // 使用object.create(null) 要比 {} 创建对象要更空 因为不会创建object.prototype这个委托
        var Eo = Object.create( null );

        // 把数组展开成参数
        foo.apply(Eo,[2,3]);

        // 使用bind(...) 进行柯里化
        var bar = foo.bind(Eo,2);
        bar(3);
    </script>
</body>
</html>